package br.fatec.ads.servlet;

import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.fatec.ads.dao.CandidaturaAgendamentoDAO;
import br.fatec.ads.dao.CandidaturaDAO;
import br.fatec.ads.dao.PerguntaDAO;
import br.fatec.ads.dao.ProcessoSeletivoDAO;
import br.fatec.ads.dao.TipoAgendamentoDAO;
import br.fatec.ads.dao.UsuarioDAO;
import br.fatec.ads.dao.VagaDAO;
import br.fatec.ads.exception.CandidaturaAgendamentoException;
import br.fatec.ads.exception.CandidaturaException;
import br.fatec.ads.exception.DataBaseException;
import br.fatec.ads.exception.ProcessoSeletivoException;
import br.fatec.ads.exception.TipoAgendamentoException;
import br.fatec.ads.exception.UsuarioException;
import br.fatec.ads.exception.VagaException;
import br.fatec.ads.model.Area;
import br.fatec.ads.model.Candidatura;
import br.fatec.ads.model.CandidaturaAgendamento;
import br.fatec.ads.model.ProcessoSeletivo;
import br.fatec.ads.model.TipoAgendamento;
import br.fatec.ads.model.Usuario;
import br.fatec.ads.model.Vaga;

public class CandidaturaAgendamentoIncluir extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public CandidaturaAgendamentoIncluir() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			List listaProcessoSeletivo = new ArrayList();
			List listaTipoAgendamento = new ArrayList();
			HttpSession session = request.getSession(false);
			
			session.removeAttribute("processoSeletivoPesqIncluir");
			session.removeAttribute("vagaPesqIncluir");
			session.removeAttribute("usuarioPesqIncluir");
			session.removeAttribute("tipoAgendamentoPesqIncluir");
			session.removeAttribute("listaVagaIncluir");
			session.removeAttribute("listaUsuarioIncluir");
			
			ProcessoSeletivoDAO processoSeletivoDAO = new ProcessoSeletivoDAO();
			TipoAgendamentoDAO tipoAgendamentoDAO = new TipoAgendamentoDAO();
		
			listaProcessoSeletivo = processoSeletivoDAO.listarProcessoSeletivo(null, null);
			listaTipoAgendamento = tipoAgendamentoDAO.listarTipoAgendamento(new TipoAgendamento());
			
			session.setAttribute("listaComboProcessoSeletivoIncluir", listaProcessoSeletivo);
			session.setAttribute("listaComboTipoAgendamentoIncluir", listaTipoAgendamento);
			session.setAttribute("listaComboVagaIncluir", new ArrayList());
			session.setAttribute("listaComboUsuarioIncluir", new ArrayList());
			session.setAttribute("disableVagaIncluir", "disabled");
			session.setAttribute("disableUsuarioIncluir", "disabled");
			
			request.getRequestDispatcher("cadcandidaturaagendamento_i.jsp").forward(request, response);
		} catch (ProcessoSeletivoException e) {
			e.printStackTrace();
		} catch (TipoAgendamentoException e) {
			e.printStackTrace();
		} catch (DataBaseException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try{
			HttpSession session = request.getSession(false);
			ProcessoSeletivo processoSeletivo = new ProcessoSeletivo();
			TipoAgendamento tipoAgendamento = new TipoAgendamento();
			CandidaturaAgendamento candidaturaAgendamento = new CandidaturaAgendamento();
			
			processoSeletivo.setIdProcessoSeletivo(request.getParameter("cmbProcessoSeletivo").equals("") ? 0
					: Integer.parseInt(request.getParameter("cmbProcessoSeletivo")));
			
			tipoAgendamento.setIdTipoAgendamento(request.getParameter("cmbTipoAgendamento").equals("") ? 0
					: Integer.parseInt(request.getParameter("cmbTipoAgendamento")));
			
			session.setAttribute("listaTipoAgendamentoIncluir", new ArrayList());
			
			if(request.getParameter("preencheCombo") != null && request.getParameter("preencheCombo").equals("Vaga")){
				if(processoSeletivo.getIdProcessoSeletivo() == 0){
					session.setAttribute("listaComboVagaIncluir", new ArrayList());
					session.setAttribute("listaComboUsuarioIncluir", new ArrayList());
					session.setAttribute("disableVagaIncluir", "disabled");
					session.setAttribute("disableUsuarioIncluir", "disabled");
					session.setAttribute("processoSeletivoPesqIncluir", new ProcessoSeletivo());
					session.setAttribute("vagaPesqIncluir", new Vaga());
				} else{
					List listaVaga = new ArrayList();
					
					Vaga vaga = new Vaga();
					
					VagaDAO vagaDAO = new VagaDAO();
					ProcessoSeletivoDAO processoSeletivoDAO = new ProcessoSeletivoDAO();
					PerguntaDAO perguntaDAO = new PerguntaDAO();
					
					processoSeletivo = processoSeletivoDAO.getProcessoSeletivo(processoSeletivo.getIdProcessoSeletivo());
					vaga.setProcessoSeletivo(processoSeletivo);
					vaga.setArea(new Area());
					
					listaVaga = vagaDAO.listarVaga(vaga);
					
					session.setAttribute("listaComboVagaIncluir", listaVaga);
					session.setAttribute("disableVagaIncluir", "");
					session.setAttribute("processoSeletivoPesqIncluir", processoSeletivo);
				}
			} else if(request.getParameter("preencheCombo") != null && request.getParameter("preencheCombo").equals("Usuario")){
				Vaga vaga = new Vaga();
				
				vaga.setIdVaga(request.getParameter("cmbVaga").equals("") ? 0
						: Integer.parseInt(request.getParameter("cmbVaga")));
				
				if(vaga.getIdVaga() == 0){
					session.setAttribute("listaComboUsuarioIncluir", new ArrayList());
					session.setAttribute("disableUsuarioIncluir", "disabled");
					session.setAttribute("vagaPesqIncluir", new Vaga());
				} else{
					List listaUsuario = new ArrayList();
					
					UsuarioDAO usuarioDAO = new UsuarioDAO();
					
					listaUsuario = usuarioDAO.listarUsuarioPorVaga(vaga.getIdVaga());
					
					session.setAttribute("vagaPesqIncluir", vaga);
					session.setAttribute("listaComboUsuarioIncluir", listaUsuario);
					session.setAttribute("disableUsuarioIncluir", "");
				}
			} else{
				Vaga vaga = new Vaga();
				Usuario usuario = new Usuario();
				Candidatura candidatura = new Candidatura();
				
				vaga.setIdVaga(request.getParameter("cmbVaga") == null ? 0
						: request.getParameter("cmbVaga").equals("") ? 0
								: Integer.parseInt(request.getParameter("cmbVaga")));
				
				usuario.setIdUsuario(request.getParameter("cmbUsuario").equals("") ? 0
						: Integer.parseInt(request.getParameter("cmbUsuario")));
				
				candidatura.setVaga(vaga);
				candidatura.setIdUsuario(usuario);
				
				CandidaturaDAO candidaturaDAO = new CandidaturaDAO();
				
				candidatura = candidaturaDAO.getCandidaturaPorVagaUsuario(candidatura);
				
				candidaturaAgendamento.setCandidatura(candidatura);
				candidaturaAgendamento.setTipoAgendamento(tipoAgendamento);
				candidaturaAgendamento.setDescAgendamento(request.getParameter("txtDescAgendamento"));
				candidaturaAgendamento.setUsuario(session.getAttribute("usuarioDesc").toString());
				
				CandidaturaAgendamentoDAO candidaturaAgendamentoDAO = new CandidaturaAgendamentoDAO();
				
				candidaturaAgendamentoDAO.incluirCandidaturaAgendamento(candidaturaAgendamento);
				
				request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=SUCESSO_INCLUIR").forward(request, response);
				
				return;
			}
			
			request.getRequestDispatcher("cadcandidaturaagendamento_i.jsp").forward(request, response);
		} catch(VagaException e){
			e.printStackTrace();
			request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=ERRO_INCLUIR").forward(request, response);
		} catch(ProcessoSeletivoException e){
			e.printStackTrace();
			request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=ERRO_INCLUIR").forward(request, response);
		} catch(UsuarioException e){
			e.printStackTrace();
			request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=ERRO_INCLUIR").forward(request, response);
		} catch(CandidaturaException e){
			e.printStackTrace();
			request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=ERRO_INCLUIR").forward(request, response);
		} catch(CandidaturaAgendamentoException e){
			e.printStackTrace();
			request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=ERRO_INCLUIR").forward(request, response);
		} catch(DataBaseException e){
			e.printStackTrace();
			request.getRequestDispatcher("CandidaturaAgendamentoPesquisar?acao=ERRO_INCLUIR").forward(request, response);
		}
	}
}